SRC = $(wildcard *.cpp)

OBJ_PATH = obj
OBJ = $(SRC:%.cpp=$(OBJ_PATH)/%.o)

DEPENDS = $(SRC:%.cpp=$(OBJ_PATH)/%.d)

INCLUDE_PATH = -I../include

.PHONY: all
all: $(OBJ)

# *.oが必要なときのサフィックスルール
$(OBJ_PATH)/%.o :: %.cpp Makefile
	if [ ! -d $(OBJ_PATH) ]; then mkdir $(OBJ_PATH); fi
	g++ -c $< $(INCLUDE_PATH) -o $@

# ヘッダ依存関係を*.dに出力する。
# OBJ_PATHを先頭に追加。
$(OBJ_PATH)/%.d:%.cpp
	if [ ! -d $(OBJ_PATH) ]; then mkdir $(OBJ_PATH); fi
	g++ -MM $^ $(INCLUDE_PATH) \
		| sed "s/^/$(OBJ_PATH)\//g" \
		| sed "s/:/ $(OBJ_PATH)\/$*.d :/g" > $@

# 出力した*.dを読み込む
-include $(DEPENDS)

.PHONY: clean
clean:
	rm -f $(OBJ)
	rm -f $(DEPENDS)
